package top.lixunda.commerce.common.core.controller.wrapper;

import top.lixunda.commerce.common.core.utils.EntityGetFunction;

import java.util.List;
import java.util.Map;

/**
 * @author LiXunda
 * @version time:2019/10/14 13:21
 */
@SuppressWarnings("unchecked")
public interface ILambdaUpdateSqlWrapper<T> extends IUpdateSqlWrapper<T>, ILambdaAbstractSqlWrapper<T> {

    ILambdaUpdateSqlWrapper<T> set(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> set(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> updateAll();

    @Override
    ILambdaUpdateSqlWrapper<T> updateNotNull();

    @Override
    UpdateEntityBlock<T> getEntityBlock();

    @Override
    BaseDataUpdateSqlWrapper toDataUpdateSqlWrapper();

    @Override
    ILambdaUpdateSqlWrapper<T> groupBy(String... column);

    @Override
    ILambdaUpdateSqlWrapper<T> orderBy(Map<String, String> map);

    @Override
    ILambdaUpdateSqlWrapper<T> orderBy(String column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> orderByAsc(String... columns);

    @Override
    ILambdaUpdateSqlWrapper<T> orderByDesc(String... columns);

    @Override
    ILambdaUpdateSqlWrapper<T> having(String column);

    @Override
    ILambdaUpdateSqlWrapper<T> limit(int start, int count);

    @Override
    ILambdaUpdateSqlWrapper<T> allEq(Map<String, Object> map);

    @Override
    ILambdaUpdateSqlWrapper<T> eq(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> ne(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> gt(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> ge(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> lt(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> le(String column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> between(String column, Object value1, Object value2);

    @Override
    ILambdaUpdateSqlWrapper<T> notBetween(String column, Object value1, Object value2);

    @Override
    ILambdaUpdateSqlWrapper<T> like(String column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> notLike(String column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> likeLeft(String column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> likeRight(String column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> isNull(String... column);

    @Override
    ILambdaUpdateSqlWrapper<T> isNotNull(String... column);

    @Override
    ILambdaUpdateSqlWrapper<T> in(String column, List<?> values);

    @Override
    ILambdaUpdateSqlWrapper<T> notIn(String column, List<?> values);

    @Override
    ILambdaUpdateSqlWrapper<T> or();

    @Override
    ILambdaUpdateSqlWrapper<T> and();

    @Override
    ILambdaUpdateSqlWrapper<T> or(ConditionBlock sqlBlock);

    @Override
    ILambdaUpdateSqlWrapper<T> and(ConditionBlock sqlBlock);

    @Override
    T getEntity();

    @Override
    ILambdaUpdateSqlWrapper<T> setEntity(T t);

    @Override
    ILambdaUpdateSqlWrapper<T> groupBy(EntityGetFunction<T, ?> column);

    @Override
    ILambdaUpdateSqlWrapper<T> groupBy(EntityGetFunction<T, ?>... columns);

    @Override
    ILambdaUpdateSqlWrapper<T> orderBy(EntityGetFunction<T, ?> column, String type);

    @Override
    ILambdaUpdateSqlWrapper<T> orderByAsc(EntityGetFunction<T, ?>... column);

    @Override
    ILambdaUpdateSqlWrapper<T> orderByDesc(EntityGetFunction<T, ?>... column);

    @Override
    ILambdaUpdateSqlWrapper<T> having(EntityGetFunction<T, ?> column);

    @Override
    ILambdaUpdateSqlWrapper<T> eq(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> ne(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> gt(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> ge(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> lt(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> le(EntityGetFunction<T, ?> column, Object value);

    @Override
    ILambdaUpdateSqlWrapper<T> between(EntityGetFunction<T, ?> column, Object value1, Object value2);

    @Override
    ILambdaUpdateSqlWrapper<T> notBetween(EntityGetFunction<T, ?> column, Object value1, Object value2);

    @Override
    ILambdaUpdateSqlWrapper<T> like(EntityGetFunction<T, ?> column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> notLike(EntityGetFunction<T, ?> column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> likeLeft(EntityGetFunction<T, ?> column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> likeRight(EntityGetFunction<T, ?> column, String value);

    @Override
    ILambdaUpdateSqlWrapper<T> isNull(EntityGetFunction<T, ?>... column);

    @Override
    ILambdaUpdateSqlWrapper<T> isNotNull(EntityGetFunction<T, ?>... column);

    @Override
    ILambdaUpdateSqlWrapper<T> in(EntityGetFunction<T, ?> column, List<?> values);

    @Override
    ILambdaUpdateSqlWrapper<T> notIn(EntityGetFunction<T, ?> column, List<?> values);

    @Override
    ILambdaUpdateSqlWrapper<T> apply(String applySql, Object... params);
}
